package msg

import (
	"bytes"
	"encoding/binary"
	"encoding/gob"
)

type BaseMsg struct {
	MsgId int
}

func EncodeMsg(msg interface{}) ([]byte, error) {
	var buff bytes.Buffer
	enc := gob.NewEncoder(&buff)
	err := enc.Encode(msg)
	return buff.Bytes(), err
}

func DecodeMsg(data []byte, out interface{}) error {

	buff := bytes.NewBuffer(data)
	dec := gob.NewDecoder(buff)
	return dec.Decode(out)
}

func S2CMsg(msgid int, data []byte) ([]byte, error) {
	buf := bytes.NewBuffer(nil)

	if err := binary.Write(buf, binary.LittleEndian, int16(msgid)); err != nil {
		return nil, err
	}

	if _, err := buf.Write(data); err != nil {
		return nil, err
	}

	return buf.Bytes(), nil
}
